/*Joseph A. Coll
FD and Stereotypes
7/9/2023*/


*Load and append data
use "Political Racial Threat White Disenfranchisement Support 2020 Data Cleaned.dta", clear
append using "Political Racial Threat White Disenfranchisement Support Data 2024 Cleaned.dta", force

*Listwise deletion
local vars supports_fd /// DV
black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy 
foreach x of local vars {
	drop if `x'==.
}
********************************************************************************
********************************************************************************
********************************************************************************
**# Manuscript Tables and Figures
********************************************************************************
********************************************************************************
********************************************************************************

********************************************************************************
*T1-Summary Stats
********************************************************************************
sum supports_fd /// DV
black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy i.survey_mode i.year [aw=post_weight] 


********************************************************************************
*F2-Felon Disenfranchisement and Perceptions of Black Influence Among White Americans
********************************************************************************
*Support for Felon Disenfranchisement
	tab supports_fd  [aw=post_weight]
	hist supports_fd , d percent ///
 	scheme(plotplain)  ///
	xtitle("") ///
	xlabel(1"Opposes" ///
		2 "Neither" ///
		3 "Supports") ///
	xscale(r(0 4)) ///
	title("DV: Support for Felon Disenfranchisement") ///
	name(hist_supports_fd_scale, replace)
	graph export hist_supports_fd_scale.png, as(png) replace
	graph save hist_supports_fd_scale, replace

*Black Influence
	tab black_white_influence3 if white_non==1 [aw=post_weight]
	sum black_white_influence3 if white_non==1 [aw=post_weight]
	ci means black_white_influence3 [aw=post_weight]
	hist black_white_influence3, d percent ///
 	scheme(plotplain)  ///
 	xtitle("") ///
	xlabel(1 "Low" ///
		2 "Moderate" ///
		3 "High", angle(0)) ///
	xscale(r(0 4)) ///
	title("IV: Political Threat") ///
	name(hist_black_influence, replace)
	graph export hist_black_influence.png, as(png) replace
	graph save hist_black_influence, replace

graph combine hist_supports_fd_scale hist_black_influence, col(1) ycommon ///
	name(iv_dv, replace)
	graph export iv_dv.png, as(png) replace
	graph save iv_dv, replace

********************************************************************************
**# GOLOGIT T2-Perceptions of Black Political Influence and Support for Felon Disenfranchisement
********************************************************************************
*Black Influence
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025) 
estimates store bw_gologit
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3 survey_mode=1) /// Politics
	atmeans 	

	mplotoffset, name(bw_gologit, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit.png, as(png) replace
	graph save bw_gologit, replace
	
esttab bw_gologit ///
using bw_gologit.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast noomitted unstack nonumbers nobase ///
eqlabel("(1) Oppose" "(2) Neither") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans") ///
nomtitles

********************************************************************************
**# GOLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Partisanship
********************************************************************************
*Black Influence for Republicans
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_r

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_r.png, as(png) replace
	graph save bw_gologit_r, replace

*Black Influence for Democrats
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_d

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_d.png, as(png) replace
	graph save bw_gologit_d, replace

graph combine bw_gologit_r bw_gologit_d, ycommon name(bw_gologit_pid_sub, replace)
	graph export bw_gologit_pid_sub.png, as(png) replace
	graph save bw_gologit_pid_sub, replace

*Black Influence x PID
gologit2 supports_fd /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_pidint

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_pidint_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_pidint_r.png, as(png) replace
	graph save bw_gologit_pidint_r, replace

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=0 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_pidint_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_pidint_d.png, as(png) replace
	graph save bw_gologit_pidint_d, replace

	graph combine bw_gologit_pidint_r bw_gologit_pidint_d, name(bw_gologit_pidint, replace)
	graph export bw_gologit_pidint.png, as(png) replace
	graph save bw_gologit_pidint, replace

esttab bw_gologit_r bw_gologit_d bw_gologit_pidint ///
using bw_gologit_pidint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast noomitted unstack nonumbers nobase nodepvars nomtitles ///
eqlabel("(1) Oppose" "(2) Neither" "(3) Oppose" "(4) Neither" "(5) Oppose" "(6) Neither") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.rep_w_lean *.black_white_influence3#*.rep_w_lean  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party") ///
mgroups("Republican Subsample" "Democrat Subsample" "Interaction", pattern(1 1 1)) 
 

********************************************************************************
**# GOLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Ideology
********************************************************************************
*Black Influence Liberals
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_l

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_l.png, as(png) replace
	graph save bw_gologit_l, replace
	
*Black Influence Conservatives
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==3, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_c

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_c.png, as(png) replace
	graph save bw_gologit_c, replace
	
graph combine bw_gologit_c bw_gologit_l, name(bw_gologit_ideo_sub, replace)
	graph export bw_gologit_ideo_sub.png, as(png) replace
	graph save bw_gologit_ideo_sub, replace

*Black Influence IDEO interaction
gologit2 supports_fd /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_ideoint

	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_ideoint_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_ideoint_l.png, as(png) replace
	graph save bw_gologit_ideoint_l, replace
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=3 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_ideoint_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_ideoint_c.png, as(png) replace
	graph save bw_gologit_ideoint_c, replace
	
graph combine bw_gologit_ideoint_c bw_gologit_ideoint_l, name(bw_gologit_ideoint, replace)

esttab bw_gologit_c bw_gologit_l bw_gologit_ideoint ///
using bw_gologit_ideoint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast noomitted unstack nonumbers nobase nodepvars nomtitles ///
eqlabel("(1) Oppose" "(2) Neither" "(3) Oppose" "(4) Neither" "(5) Oppose" "(6) Neither") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.conservativism3 *.black_white_influence3#*.conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology") ///
mgroups("Conservative Subsample" "Liberal Subsample" "Interaction", pattern(1 1 1)) 

********************************************************************************
********************************************************************************
********************************************************************************
**# Appendix A: Ordered Logistic Regression 
********************************************************************************
********************************************************************************
********************************************************************************

********************************************************************************
**# OLOGIT T2-Perceptions of Black Political Influence and Support for Felon Disenfranchisement
********************************************************************************
*Black Influence
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev)
estimates store bw_ologit
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3 survey_mode=1) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit.png, as(png) replace
	graph save bw_ologit, replace
	
esttab bw_ologit ///
using bw_ologit.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast noomitted nobase     ///
eqlabel("" "Cuts") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans") 
 
********************************************************************************
**# OLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Partisanship
********************************************************************************
*Black Influence for Republicans
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev)
estimates store bw_ologit_r

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_r.png, as(png) replace
	graph save bw_ologit_r, replace

*Black Influence for Democrats
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev)
estimates store bw_ologit_d

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_d.png, as(png) replace
	graph save bw_ologit_d, replace

graph combine bw_ologit_r bw_ologit_d, ycommon name(bw_ologit_pid_sub, replace)
	graph export bw_ologit_pid_sub.png, as(png) replace
	graph save bw_ologit_pid_sub, replace

*Black Influence x PID
ologit supports_fd /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev)
estimates store bw_ologit_pidint

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_pidint_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_pidint_r.png, as(png) replace
	graph save bw_ologit_pidint_r, replace

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=0 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_pidint_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_pidint_d.png, as(png) replace
	graph save bw_ologit_pidint_d, replace

	graph combine bw_ologit_pidint_r bw_ologit_pidint_d, name(bw_ologit_pidint, replace)
	graph export bw_ologit_pidint.png, as(png) replace
	graph save bw_ologit_pidint, replace

esttab bw_ologit_r bw_ologit_d bw_ologit_pidint ///
using bw_ologit_pidint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast ///
nodepvars nobase noomitted eqlabel("" "Cuts") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.rep_w_lean *.black_white_influence3#*.rep_w_lean  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party") ///
mlabel("Republican Subsample" "Democrat Subsample" "Interaction") 

********************************************************************************
**# OLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Ideology
********************************************************************************
*Black Influence Liberals
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==1, robust cluster(state_abbrev)
estimates store bw_ologit_l

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_l.png, as(png) replace
	graph save bw_ologit_l, replace
	
*Black Influence Conservatives
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==3, robust cluster(state_abbrev)
estimates store bw_ologit_c

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_c.png, as(png) replace
	graph save bw_ologit_c, replace
	
graph combine bw_ologit_c bw_ologit_l, name(bw_ologit_ideo_sub, replace)
	graph export bw_ologit_ideo_sub.png, as(png) replace
	graph save bw_ologit_ideo_sub, replace
	
*Black Influence IDEO interaction
ologit supports_fd /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev)
estimates store bw_ologit_ideoint

	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_ideoint_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_ideoint_l.png, as(png) replace
	graph save bw_ologit_ideoint_l, replace
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=3 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_ologit_ideoint_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_ologit_ideoint_c.png, as(png) replace
	graph save bw_ologit_ideoint_c, replace
	
graph combine bw_ologit_ideoint_c bw_ologit_ideoint_l, name(bw_ologit_ideoint, replace)
	graph export bw_ologit_ideoint.png, as(png) replace
	graph save bw_ologit_ideoint, replace

esttab bw_ologit_c bw_ologit_l bw_ologit_ideoint ///
using bw_ologit_ideoint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast ///
nodepvars nobase noomitted eqlabel("" "Cuts") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.conservativism3 *.black_white_influence3#*.conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology") ///
mlabel("Conservative Subsample" "Liberal Subsample" "Interaction") 

********************************************************************************
********************************************************************************
********************************************************************************
**# Appendix B: Multinomial Ordered Logistic Regression 
********************************************************************************
********************************************************************************
********************************************************************************

********************************************************************************
**# MLOGIT T2-Perceptions of Black Political Influence and Support for Felon Disenfranchisement
********************************************************************************
*Black Influence
mlogit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3 survey_mode=1) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit.png, as(png) replace
	graph save bw_mlogit, replace
	
esttab bw_mlogit ///
using bw_mlogit.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Multinomial logistic regression predicting support for felon disenfranchisement (higher values=more likely to be in oppose/neither category compared to support)." ///
"Dependent variable reference group is supporting felon disenfranchisement." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast nobase noomitted unstack nonumbers  ///
eqlabel("") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans") ///
mlabel("Opposes" `" "(2)" "Neither" "') 

********************************************************************************
**# MLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Partisanship
********************************************************************************
*Black Influence for Republicans
mlogit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit_r

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_r.png, as(png) replace
	graph save bw_mlogit_r, replace

*Black Influence for Democrats
mlogit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit_d

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_d.png, as(png) replace
	graph save bw_mlogit_d, replace

graph combine bw_mlogit_r bw_mlogit_d, ycommon name(bw_mlogit_pid_sub, replace)
	graph export bw_mlogit_pid_sub.png, as(png) replace
	graph save bw_mlogit_pid_sub, replace

*Black Influence x PID
mlogit supports_fd /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit_pidint

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_pidint_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_pidint_r.png, as(png) replace
	graph save bw_mlogit_pidint_r, replace

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=0 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_pidint_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_pidint_d.png, as(png) replace
	graph save bw_mlogit_pidint_d, replace

	graph combine bw_mlogit_pidint_r bw_mlogit_pidint_d, name(bw_mlogit_pidint, replace)
	graph export bw_mlogit_pidint.png, as(png) replace
	graph save bw_mlogit_pidint, replace

esttab bw_mlogit_r bw_mlogit_d bw_mlogit_pidint ///
using bw_mlogit_pidint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Multinomial logistic regression predicting support for felon disenfranchisement (higher values=more likely to be in oppose/neither category compared to support)." ///
"Dependent variable reference group is supporting felon disenfranchisement." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers ///
nodepvars nobase noomitted eqlabel("") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.rep_w_lean *.black_white_influence3#*.rep_w_lean  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party") ///
mlabel("Oppose" "Oppose" "Oppose") ///
mgroups("Republican Subsample" "Democrat Subsample" "Interaction", pattern(1 1 1)) 

********************************************************************************
**# MLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Ideology
********************************************************************************
*Black Influence Liberals
mlogit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==1, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit_l

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_l.png, as(png) replace
	graph save bw_mlogit_l, replace
	
*Black Influence Conservatives
mlogit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==3, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit_c

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_c.png, as(png) replace
	graph save bw_mlogit_c, replace
	
graph combine bw_mlogit_c bw_mlogit_l, name(bw_mlogit_ideo_sub, replace)
	graph export bw_mlogit_ideo_sub.png, as(png) replace
	graph save bw_mlogit_ideo_sub, replace

*Black Influence IDEO interaction
mlogit supports_fd /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) base(3)
estimates store bw_mlogit_ideoint

	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_ideoint_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_ideoint_l.png, as(png) replace
	graph save bw_mlogit_ideoint_l, replace
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=3 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_mlogit_ideoint_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_mlogit_ideoint_c.png, as(png) replace
	graph save bw_mlogit_ideoint_c, replace
	
graph combine bw_mlogit_ideoint_c bw_mlogit_ideoint_l, name(bw_mlogit_ideoint, replace)
	graph export bw_mlogit_ideoint.png, as(png) replace
	graph save bw_mlogit_ideoint, replace
	
esttab bw_mlogit_c bw_mlogit_l bw_mlogit_ideoint ///
using bw_mlogit_ideoint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Multinomial logistic regression predicting support for felon disenfranchisement (higher values=more likely to be in oppose/neither category compared to support)." ///
"Dependent variable reference group is supporting felon disenfranchisement." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers ///
nodepvars nobase noomitted eqlabel("") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.conservativism3 *.black_white_influence3#*.conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology") ///
mlabel("Oppose" "Oppose" "Oppose") ///
mgroups("Republican Subsample" "Democrat Subsample" "Interaction", pattern(1 1 1)) 

********************************************************************************
********************************************************************************
********************************************************************************
**# Appendix C: Linear Regression 
********************************************************************************
********************************************************************************
********************************************************************************

********************************************************************************
**# OLS T2-Perceptions of Black Political Influence and Support for Felon Disenfranchisement
********************************************************************************
*Black Influence
reg supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev)
estimates store bw_reg
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3 survey_mode=1) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg.png, as(png) replace
	graph save bw_reg, replace
	
esttab bw_reg ///
using bw_reg.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Linear regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
ar2 obslast nobase noomitted ///
eqlabel("") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans")
 
********************************************************************************
**# OLS T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Partisanship
********************************************************************************
*Black Influence for Republicans
reg supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev)
estimates store bw_reg_r

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_r.png, as(png) replace
	graph save bw_reg_r, replace

*Black Influence for Democrats
reg supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev)
estimates store bw_reg_d

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_d.png, as(png) replace
	graph save bw_reg_d, replace

graph combine bw_reg_r bw_reg_d, ycommon name(bw_reg_pid_sub, replace)
	graph export bw_reg_pid_sub.png, as(png) replace
	graph save bw_reg_pid_sub, replace

*Black Influence x PID
reg supports_fd /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev)
estimates store bw_reg_pidint

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_pidint_r, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_pidint_r.png, as(png) replace
	graph save bw_reg_pidint_r, replace

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=0 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_pidint_d, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_pidint_d.png, as(png) replace
	graph save bw_reg_pidint_d, replace

graph combine bw_reg_pidint_r bw_reg_pidint_d, name(bw_reg_pidint, replace)
	graph export bw_reg_pidint.png, as(png) replace
	graph save bw_reg_pidint, replace

esttab bw_reg_r bw_reg_d bw_reg_pidint ///
using bw_reg_pidint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Linear regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
ar2 obslast ///
nodepvars nobase noomitted eqlabel("") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.rep_w_lean *.black_white_influence3#*.rep_w_lean  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party") ///
mlabel("Republican Subsample" "Democrat Subsample" "Interaction") 

********************************************************************************
**# OLS T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Ideology
********************************************************************************
*Black Influence Liberals
reg supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==1, robust cluster(state_abbrev)
estimates store bw_reg_l

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_l.png, as(png) replace
	graph save bw_reg_l, replace
	
*Black Influence Conservatives
reg supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==3, robust cluster(state_abbrev)
estimates store bw_reg_c

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_c.png, as(png) replace
	graph save bw_reg_c, replace
	
graph combine bw_reg_c bw_reg_l, name(bw_reg_ideo_sub, replace)
	graph export bw_reg_ideo_sub.png, as(png) replace
	graph save bw_reg_ideo_sub, replace

*Black Influence IDEO interaction
reg supports_fd /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev)
estimates store bw_reg_ideoint

	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_ideoint_l, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_ideoint_l.png, as(png) replace
	graph save bw_reg_ideoint_l, replace
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=3 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_reg_ideoint_c, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(.75 3.25)) ///
	ylabel(1 "Oppose" 2 "Neither" 3 "Support") ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_ideoint_c.png, as(png) replace
	graph save bw_reg_ideoint_c, replace
	
graph combine bw_reg_ideoint_c bw_reg_ideoint_l, name(bw_reg_ideoint, replace)
	graph export bw_reg_ideoint.png, as(png) replace
	graph save bw_reg_ideoint, replace

esttab bw_reg_c bw_reg_l bw_reg_ideoint ///
using bw_reg_ideoint.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Linear regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
ar2 obslast ///
nodepvars nobase noomitted eqlabel("") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.conservativism3 *.black_white_influence3#*.conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology") ///
mlabel("Conservative Subsample" "Liberal Subsample" "Interaction") 

********************************************************************************
********************************************************************************
********************************************************************************
**Appendix D: Full DV Scale
********************************************************************************
********************************************************************************
********************************************************************************

********************************************************************************
**# GOLOGIT T2-Perceptions of Black Political Influence and Support for Felon Disenfranchisement
********************************************************************************
*Black Influence
gologit2 supports_fd_scale /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_fdv
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3 survey_mode=1) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_reg_ideoint_fdv.png, as(png) replace
	graph save bw_reg_ideoint_fdv, replace

esttab bw_gologit_fdv ///
using bw_gologit_fdv.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support). O.=Oppose; F.=Favor." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars noomitted nobase nomtitle ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans") 

********************************************************************************
**# GOLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Partisanship
********************************************************************************
*Black Influence for Republicans
gologit2 supports_fd_scale /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_r_fdv

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_r_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_r_fdv.png, as(png) replace
	graph save bw_gologit_r_fdv, replace

*Black Influence for Democrats
gologit2 supports_fd_scale /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_d_fdv

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_d_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_d_fdv.png, as(png) replace
	graph save bw_gologit_d_fdv, replace

graph combine bw_gologit_r_fdv bw_gologit_d_fdv, ycommon name(bw_gologit_pid_sub_fdv, replace)
	graph export bw_gologit_pid_sub_fdv.png, as(png) replace
	graph save bw_gologit_pid_sub_fdv, replace

*Black Influence x PID
gologit2 supports_fd_scale /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_pidint_fdv

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_pidint_r_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Republicans") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_pidint_r_fdv.png, as(png) replace
	graph save bw_gologit_pidint_r_fdv, replace

	margins, at(black_white_influence3=(1(1)3) /// DV
	rep_w_lean=0 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	 poli_int_politics=3 conservativism3=2 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_pidint_d_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Democrats") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_pidint_d_fdv.png, as(png) replace
	graph save bw_gologit_pidint_d_fdv, replace

graph combine bw_gologit_pidint_r_fdv bw_gologit_pidint_d_fdv, name(bw_gologit_pidint_fdv, replace)
	graph export bw_gologit_pidint_fdv.png, as(png) replace
	graph save bw_gologit_pidint_fdv, replace

esttab bw_gologit_r_fdv ///
using bw_gologit_pidint_fdvR.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars nobase noomitted nomtitles ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party (Republicans)") 

esttab bw_gologit_d_fdv ///
using bw_gologit_pidint_fdvD.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars nobase noomitted nomtitles ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party (Democrats)") 

 esttab bw_gologit_pidint_fdv ///
using bw_gologit_pidint_fdv.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars nobase noomitted nomtitles ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 *.rep_w_lean *.black_white_influence3#*.rep_w_lean  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Party (Interaction)") 

********************************************************************************
**# GOLOGIT T3-Perceptions of Black Political Influence and Support for Felon Disenfranchisement by Ideology
********************************************************************************
*Black Influence Liberals
gologit2 supports_fd_scale /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==1, robust cluster(state_abbrev)  
estimates store bw_gologit_l_fdv

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_l_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_l_fdv.png, as(png) replace
	graph save bw_gologit_l_fdv, replace
	
*Black Influence Conservatives
gologit2 supports_fd_scale /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==3, robust cluster(state_abbrev) autofit(.025)
estimates store bw_gologit_c_fdv

	margins, at(black_white_influence3=(1(1)3) /// DV
	whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3 perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans
	
	mplotoffset, name(bw_gologit_c_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_c_fdv.png, as(png) replace
	graph save bw_gologit_c_fdv, replace
	
graph combine bw_gologit_c_fdv bw_gologit_l_fdv, name(bw_gologit_ideo_sub_fdv, replace)
	graph export bw_gologit_ideo_sub_fdv.png, as(png) replace
	graph save bw_gologit_ideo_sub_fdv, replace
	
*Black Influence IDEO interaction
mlogit supports_fd_scale /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) 
estimates store bw_gologit_ideoint_fdv

	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=1 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_ideoint_l_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Liberals") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_ideoint_l._fdvpng, as(png) replace
	graph save bw_gologit_ideoint_l_fdv, replace
	
	margins, at(black_white_influence3=(1(1)3) /// DV
	conservativism3=3 whites_lose_jobs3=2 stereo_violent_black_diff3=1  ft_black=69  /// Racial Stereotypes
 	age=50 educ=4 income_mean=14 /// Demographics
	rep_w_lean=1 ind_nolean=0 poli_int_politics=3  perc_black=12 spending_crime=4 fd_policy=3) /// Politics
	atmeans  
	
	mplotoffset, name(bw_gologit_ideoint_c_fdv, replace) ///
 	scheme(plotplain)  ///
 	plot1opts(color(black) msymbol(D) lpattern(shortdash) lcolor(black%30)) ///
	ci1opts(color(black)) ///
	/// text(0.039 1.5 "Oppose", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot2opts(color(black) msymbol(T) lpattern(shortdash) lcolor(black%30)) ///
	ci2opts(color(black)) ///
	/// text(0.039 2.5 "Support", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	plot3opts(color(black) msymbol(O) lpattern(shortdash) lcolor(black%30)) ///
	ci3opts(color(black)) ///
	/// text(-0.056 2 "Neither", box bcolor(white) lcolor(black) height(5) width (12.5))  ///
	xscale(r(.5 3.5)) ///
	xtitle("Perceived Political Racial Threat", size(*.9)) ///
	xlabel(1 "Low" 2 "Moderate" 3 "High") ///
	yscale(r(0 1)) ///
	ylabel(0(.1)1) ///
	ytitle("Probability of Answering...") ///	
	title("Conservatives") ///
	legend(region(lstyle(solid)) order(4 "...Opposes" 5 "...Neither" 6 "...Supports") pos(6) col(3) title("Support for Felon Disenfranchisement", size(3))) ///
	graphregion(color(white))
	graph export bw_gologit_ideoint_c_fdv.png, as(png) replace
	graph save bw_gologit_ideoint_c_fdv, replace
	
graph combine bw_gologit_ideoint_c_fdv bw_gologit_ideoint_l_fdv, name(bw_gologit_ideoint_fdv, replace)
	graph export bw_gologit_ideoint_fdv.png, as(png) replace
	graph save bw_gologit_ideoint_fdv, replace
	
esttab bw_gologit_c_fdv ///
using bw_gologit_ideoint_fdvC.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars nobase noomitted nomtitles ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology (Conservatives)") 

esttab bw_gologit_l_fdv ///
using bw_gologit_ideoint_fdvL.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars nobase noomitted nomtitles ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology (Liberals)") 

esttab bw_gologit_ideoint_fdv ///
using bw_gologit_ideoint_fdv.rtf, replace ///
cells(b(star fmt(3)) se(fmt(3) par)) starlevels( * 0.10 ** 0.05 *** 0.01) ///
label note("Generalized ordered logistic regression predicting support for felon disenfranchisement (higher values=greater support)." ///
"Independent variable reference group is low political racial threat." ///
"All models estimated with robust standard errors clustered by state and include survey mode and year fixed effects. *0.10 **0.05 ***0.01.") ///
pr2 obslast unstack nonumbers nodepvars nobase noomitted nomtitles ///
eqlabel("O. Greatly" "O. Moderate" "O. Little" "Neither" "F. Little" "F. Moderate") drop(*.survey_mode *.year) interaction(" x ") ///
order(*.black_white_influence3 conservativism3  stereo_violent_black_diff3 ft_black /// Racial Stereotypes
age educ income_mean /// Demographics
 rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy ) ///
 title("Table XX: Perceptions of Black Political Influence and Support for Felon Disenfranchisement Among White Americans by Ideology (Interaction)") 

********************************************************************************
********************************************************************************
********************************************************************************
**# Appendix E: Correlates and Predictors of Political Racial Threat
********************************************************************************
********************************************************************************
********************************************************************************

*Correlation
local vars  stereo_violent_black_diff3 whites_lose_jobs3 ft_black racism_scale2_1 spending_crime conservativism3
foreach x of local vars {
	pwcorr black_white_influence3 `x', sig
}
corr black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black racism_scale2_1 spending_crime conservativism3

alpha black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black racism_scale2_1 spending_crime conservativism3, item

factor black_white_influence3 stereo_violent_black_diff3 whites_lose_jobs3 ft_black racism_scale2_1 spending_crime conservativism3


********************************************************************************
********************************************************************************
********************************************************************************
**# Appendix F: Parallel Lines Tests
********************************************************************************
********************************************************************************
********************************************************************************

********************************************************************************
**# GOLOGIT Parallel Lines Tests
********************************************************************************
*Black Influence
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025) 
oparallel

*Black Influence for Republicans
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev) autofit(.025)

gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev) autofit(.025)

*Black Influence x PID
gologit2 supports_fd /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025)

*Black Influence Liberals
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==1, robust cluster(state_abbrev) autofit(.025)

*Black Influence Conservatives
gologit2 supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1 & conservativism3==3, robust cluster(state_abbrev) autofit(.025)

*Black Influence IDEO interaction
gologit2 supports_fd /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year [pw=post_weight] if white_non==1, robust cluster(state_abbrev) autofit(.025)

********************************************************************************
**# OLOGIT Parallel Lines Tests
********************************************************************************
*Black Influence
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1, robust cluster(state_abbrev)
oparallel

*Black Influence for Republicans
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1 & rep_w_lean==1, robust cluster(state_abbrev)
oparallel

*Black Influence for Democrats
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1 & dem_w_lean==1, robust cluster(state_abbrev)
oparallel

*Black Influence x PID
ologit supports_fd /// DV
b1.black_white_influence3##i.rep_w_lean c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
 ind_nolean poli_int_politics conservativism3 perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1, robust cluster(state_abbrev)
oparallel

*Black Influence Liberals
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1 & conservativism3==1, robust cluster(state_abbrev)
oparallel

*Black Influence Conservatives
ologit supports_fd /// DV
b1.black_white_influence3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1 & conservativism3==3, robust cluster(state_abbrev)
oparallel

*Black Influence IDEO interaction
ologit supports_fd /// DV
b1.black_white_influence3##i.conservativism3 c.stereo_violent_black_diff3 c.whites_lose_jobs3 c.ft_black  /// Racial Stereotypes
age educ income_mean /// Demographics
rep_w_lean ind_nolean poli_int_politics  perc_black spending_crime fd_policy /// Politics
i.survey_mode i.year if white_non==1, robust cluster(state_abbrev)
oparallel
